const express = require('express');
const bodyParser = require('body-parser');
const fs = require('fs');
const app = express();
const PORT = 3000;
const zlib = require('zlib');

app.use(express.json({ limit: '1mb' }))
app.use(bodyParser.json());
app.post('/saveLastJson', (req, res) => {
  // 检查请求是否包含 JSON 数据
  if (!req.body || Object.keys(req.body).length === 0) {
    return res.status(400).json({ error: 'No JSON data provided.' });
  }

  // 保存 JSON 数据到文件
  fs.writeFile('lastData.json', JSON.stringify(req.body), (err) => {
    if (err) {
      return res.status(500).json({ error: 'Failed to save JSON data.' });
    }
    res.json({ message: 'JSON data saved successfully.' });
  });
});
app.post('/saveJson', (req, res) => {
  // 检查请求是否包含 JSON 数据
  if (!req.body || Object.keys(req.body).length === 0) {
    return res.status(400).json({ error: 'No JSON data provided.' });
  }

  // 保存 JSON 数据到文件
  fs.writeFile('data.json', JSON.stringify(req.body), (err) => {
    if (err) {
      return res.status(500).json({ error: 'Failed to save JSON data.' });
    }
    res.json({ message: 'JSON data saved successfully.' });
  });
});
/* 
@params:{
option:[delete/add/modify,form/components]
 index:'',
  param:{
  }
}
*/
app.post('/saveDefaultOption', (req, res) => {
  let para = req.body

  if (!req.body || Object.keys(req.body).length === 0) {
    return res.status(400).json({ error: 'No JSON data provided.' });
  }
  fs.readFile('defaultOption.json', 'utf8', (err, data) => {
    if (err) {
      return res.status(500).json({ error: 'Failed to read JSON data.' });
    }
    let jsonData;
    try {
      jsonData = JSON.parse(data);
      if (para.option[0] == 'add') {
        jsonData[para.option[1]].push(para.param)
      }
      if (para.option[0] == 'delete') {
        jsonData[para.option[1]].splice(para.index, 1)
      }
      if (para.option[0] == 'modify') {
        if (para.index === undefined) {
          jsonData[para.option[1]] = para.param
        } else
          jsonData[para.option[1]][para.index] = para.param
      }

      fs.writeFile('defaultOption.json', JSON.stringify(jsonData), (err) => {
        if (err) {
          return res.status(500).json({ error: 'Failed to save JSON data.' });
        }
        res.json({ message: 'JSON data saved successfully.' });
      });
    } catch (parseError) {
      return res.status(500).json({ error: 'Failed to parse JSON data.' });
    }

  });

  // 保存 JSON 数据到文件

})
app.get('/getDefaultOption', (req, res) => {
  // 读取保存的 JSON 数据文件
  fs.readFile('defaultOption.json', 'utf8', (err, data) => {
    if (err) {
      return res.status(500).json({ error: 'Failed to read JSON data.' });
    }
    let jsonData;
    try {
      res.set('Content-Encoding', 'gzip');
      zlib.gzip(data, (err, buffer) => {
        if (err) {
          res.status(500).send('Failed to compress data');
        } else {
          // 发送压缩后的数据作为响应
          res.status(200).send(buffer);
        }
      });
      // jsonData = JSON.parse(data);
    } catch (parseError) {
      return res.status(500).json({ error: 'Failed to parse JSON data.' });
    }
  });
});

app.get('/getJson', (req, res) => {
  // 读取保存的 JSON 数据文件
  fs.readFile('data.json', 'utf8', (err, data) => {
    if (err) {
      return res.status(500).json({ error: 'Failed to read JSON data.' });
    }
    let jsonData;
    try {
      res.set('Content-Encoding', 'gzip');
      zlib.gzip(data, (err, buffer) => {
        if (err) {
          res.status(500).send('Failed to compress data');
        } else {
          // 发送压缩后的数据作为响应
          res.status(200).send(buffer);
        }
      });
      // jsonData = JSON.parse(data);
    } catch (parseError) {
      return res.status(500).json({ error: 'Failed to parse JSON data.' });
    }
  });
});
app.get('/getLastJson', (req, res) => {
  // 读取保存的 JSON 数据文件
  fs.readFile('lastData.json', 'utf8', (err, data) => {
    if (err) {
      return res.status(500).json({ error: 'Failed to read JSON data.' });
    }
    let jsonData;
    try {
      res.set('Content-Encoding', 'gzip');
      zlib.gzip(data, (err, buffer) => {
        if (err) {
          res.status(500).send('Failed to compress data');
        } else {
          // 发送压缩后的数据作为响应
          res.status(200).send(buffer);
        }
      });
      // jsonData = JSON.parse(data);
    } catch (parseError) {
      return res.status(500).json({ error: 'Failed to parse JSON data.' });
    }
  });
});
app.listen(PORT, () => {
  console.log(`Server is running on port ${PORT}`);
});
